package editorsvg.editor.atributos;

/**
 * Representa un atributo de un elemento.
 * @author Jorge Berjano
 */
public abstract class Atributo implements Cloneable {
    protected String texto;        
    public static final int ATRIBUTO = 1;
    public static final int STYLE = 1;
    public static final int CSS = 2;
    private int origen;

    public Atributo() {
    }    
    
    @Override
    public String toString() {
        return texto;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null || this.texto == null) {
            return false;
        }        
        
        if (getClass() != obj.getClass()) {
            return obj.toString().equals(this.texto);
        }
        final Atributo other = (Atributo) obj;
        return this.texto.equals(other.texto);
    }
    
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    
    protected abstract void parsear(String texto) throws Exception;
    
    
    public final void setTexto(String texto) throws Exception {
        this.texto = texto;
        parsear(texto);
    }
    
    public final String getTexto() {
        return texto;
    }
    
    public final boolean isDefinido() {
        return texto != null;
    }

    /**
     * Asigna el origen de este atributo. Puede ser ATRIBUTO cuando el origen es
     * el mismo atributo, STYLE cuando el origen es el atributo sytyle, y CSS
     * cuando el origen es la hoja de estilo. 
     */
    public void setOrigen(int origen) {
        this.origen = origen;
    }

    public int getOrigen() {
        return origen;
    }
}
